package com.ahorresas.controllers;

import com.ahorresas.modelo.daos.VigenciaDao;
import com.ahorresas.modelo.beans.VigenciaBean;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class VigenciaController extends HttpServlet {
    
    private final VigenciaDao vigenciaDao = new VigenciaDao();
    private String vigencia;    
    private String porcentaje_ganancia;
    private String porcentaje_deuda;
    private int resultado;
    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        /*Control del boton accionado desde la página JSP*/
        String accion = request.getParameter("accion");
        if(accion == null)
            accion = "";
        
        vigencia = request.getParameter("vigencia");
        porcentaje_ganancia = request.getParameter("porcentaje_ganancia");
        porcentaje_deuda = request.getParameter("porcentaje_deuda");
        
        VigenciaBean vigenciaB;
        String validacion;
        resultado = 0;
        
        switch (accion) {
            case "consultar":
                validacion = obligatorios(false);
                if(validacion.length() > 0){
                    mantenerDatos(request);
                    request.setAttribute("msg", validacion);
                } else {
                    vigenciaB = vigenciaDao.buscarVigencia(Integer.parseInt(vigencia));
                    if(vigenciaB != null){
                        llenarCampos(request, vigenciaB);
                        request.setAttribute("msg", "La vigencia fué encontrada con éxito");
                    }else{
                        request.setAttribute("msg", "La Vigencia no pudo ser encontrada");
                    }
                }
                break;
            case "guardar":
                validacion = obligatorios(true);
                if(validacion.length() > 0){
                    mantenerDatos(request);
                    request.setAttribute("msg", validacion);
                } else {
                    vigenciaB = vigenciaDao.buscarVigencia(Integer.parseInt(vigencia));
                    if(vigenciaB != null){
                        vigenciaB.setVigencia(Integer.parseInt(vigencia));
                        vigenciaB.setPorcentajeGanancia(Double.parseDouble(porcentaje_ganancia) / 100);
                        vigenciaB.setPorcentajeDeuda(Double.parseDouble(porcentaje_deuda) / 100);

                        resultado = vigenciaDao.modificarVigencia(vigenciaB);
                    } else {
                        vigenciaB = new VigenciaBean();
                        vigenciaB.setVigencia(Integer.parseInt(vigencia));
                        vigenciaB.setPorcentajeGanancia(new Double(0) / 100);
                        vigenciaB.setPorcentajeDeuda(Double.parseDouble(porcentaje_deuda) / 100);

                        resultado = vigenciaDao.crearVigencia(vigenciaB);
                    }
                    
                    if(resultado == 1){
                        llenarCampos(request, null);
                        request.setAttribute("msg", "La vigencia fué guardada con éxito.");
                    } else {
                        request.setAttribute("msg", "La vigencia no pudo ser guardada.");
                    }
                }
                break;
            case "eliminar":
                validacion = obligatorios(false);
                if(validacion.length() > 0){
                    mantenerDatos(request);
                    request.setAttribute("msg", validacion);
                } else {
                    resultado = vigenciaDao.eliminarVigencia(Integer.parseInt(vigencia));
                    if(resultado == 1){
                        llenarCampos(request, null);
                        request.setAttribute("msg", "La vigencia fué eliminada con éxito");
                    } else {
                        request.setAttribute("msg", "La vigencia no pudo ser eliminada.");
                    }
                }
                break;
            case "listar":
                List<VigenciaBean> listaVigencias = vigenciaDao.listarVigencias();
                request.setAttribute("lista", listaVigencias);
                break;
        }
        
        request.getRequestDispatcher("./jsp/vigencia.jsp").forward(request, response);
    }
    
    public String obligatorios(boolean guardado){
        StringBuilder validez = new StringBuilder();
        if(vigencia == null || vigencia.equals(""))
            validez.append("El campo 'Código de Vigencia' no debe estar vacía. <br>");
        else {
            try {
                Integer.valueOf(vigencia);
            } catch (NumberFormatException e) {
                validez.append("El campo 'Código de Vigencia' debe ser numérico. <br>");
            }
        }

        /* Si es guardado de datos valida los demás campos de lo contrario 
         * retorna la validación sobre el clave 
         */
        if(!guardado){
            return validez.toString();
        }
        
//        if(porcentaje_ganancia == null || porcentaje_ganancia.equals(""))
//            validez.append("El campo 'Porcentaje de Ganancia' no debe estar vacío. <br>");
//        else {
//            try {
//                int porcentaje = Integer.valueOf(porcentaje_ganancia);
//                if(porcentaje < 0 || porcentaje > 100){
//                    validez.append("El 'Porcentaje de Ganancia' debe ser un número entre 0 y 100. <br>");
//                }
//            } catch (NumberFormatException e) {
//                validez.append("El campo 'Porcentaje de Ganancia' debe ser numérico. <br>");
//            }
//        }
        
        if(porcentaje_deuda == null || porcentaje_deuda.equals(""))
            validez.append("El campo 'Porcentaje de deuda' no debe estar vacío. <br>");
        else {
            try {
                Double porcentaje = Double.valueOf(porcentaje_deuda);
                if(porcentaje < 0 || porcentaje > 100){
                    validez.append("El 'Porcentaje de deuda' debe ser un número entre 0 y 100. <br>");
                }
            } catch (NumberFormatException e) {
                validez.append("El campo 'Porcentaje de deuda' debe ser numérico. <br>");
            }
        }
        
        return validez.toString();
    }
    
    public void llenarCampos(HttpServletRequest request, VigenciaBean vigenciaB){
        request.setAttribute("vigencia", vigenciaB != null ? vigenciaB.getVigencia(): "");
        request.setAttribute("porcentaje_ganancia", vigenciaB != null ? (vigenciaB.getPorcentajeGanancia().doubleValue() * 100) : "");
        request.setAttribute("porcentaje_deuda", vigenciaB != null ? (vigenciaB.getPorcentajeDeuda().doubleValue() * 100) : "");

    }
    
    public void mantenerDatos(HttpServletRequest request){
        request.setAttribute("vigencia", vigencia != null ? vigencia : "");
        request.setAttribute("porcentaje_ganancia", porcentaje_ganancia != null ? porcentaje_ganancia : "");
        request.setAttribute("porcentaje_deuda", porcentaje_deuda != null ? porcentaje_deuda : "");

    }
}
